#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>

// 硬件引脚配置
#define TFT_CS     5
#define TFT_RST    4
#define TFT_DC     23
#define TFT_SCLK   18
#define TFT_MOSI   19

// 初始化显示屏
Adafruit_ST7735 tft(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

// 颜色定义
#define BG_COLOR      ST7735_WHITE
#define MAIN_COLOR    0x01E0  // 绿色
#define TEXT_COLOR    ST7735_BLACK
#define WARNING_COLOR 0xF800  // 红色

// 函数声明（严格规范）
void initializeDisplay();
void drawInterface();
void drawMainStatusArea(int yPos);
void drawDataArea(int yPos);
void drawTimeArea(int yPos);
void drawWeatherIcon(int x, int y);
void drawTemperatureGauge(int x, int y, float temp);
void drawHumidityIndicator(int x, int y, int humidity);

// 初始化函数
void setup() {
  Serial.begin(115200);
  initializeDisplay();
}

void loop() {
  drawInterface();
  delay(60000); // 每分钟刷新
}

// 显示初始化
void initializeDisplay() {
  tft.initR(INITR_BLACKTAB);
  tft.setRotation(3);
  tft.fillScreen(BG_COLOR);
  tft.setTextWrap(false);
  tft.setTextColor(TEXT_COLOR);
}

// 主界面绘制
void drawInterface() {
  tft.fillScreen(BG_COLOR);
  
  // 分区绘制（精确控制Y坐标）
  drawMainStatusArea(5);    // 顶部状态区
  drawDataArea(45);         // 中间数据区
  drawTimeArea(110);        // 底部时间区
}

// 顶部状态区
void drawMainStatusArea(int yPos) {
  // 天气图标
  drawWeatherIcon(10, yPos);
  
  // 主温度显示
  tft.setTextColor(MAIN_COLOR);
  tft.setTextSize(2);
  tft.setCursor(50, yPos + 5);
  tft.print("24.5C");
  
  // 湿度显示
  tft.setTextSize(1);
  tft.setCursor(90, yPos + 10);
  tft.print("68%");
}

// 中间数据区
void drawDataArea(int yPos) {
  tft.setTextColor(TEXT_COLOR);
  tft.setTextSize(1);
  
  // 室外温度范围
  tft.setCursor(10, yPos);
  tft.print("Outdoor: -10C~9C");
  
  // 室内数据（分两行显示）
  tft.setCursor(10, yPos + 20);
  tft.print("Indoor Temp: 28.5C");
  tft.setCursor(10, yPos + 35);
  tft.print("Humidity: 24.9%");
  
  // 空气质量
  tft.setTextColor(WARNING_COLOR);
  tft.setCursor(10, yPos + 50);
  tft.print("Air Quality: Good");
}

// 底部时间区
void drawTimeArea(int yPos) {
  // 当前时间（大字号）
  tft.setTextColor(MAIN_COLOR);
  tft.setTextSize(2);
  tft.setCursor(30, yPos);
  tft.print("14:30");
  
  // 日期信息
  tft.setTextColor(TEXT_COLOR);
  tft.setTextSize(1);
  tft.setCursor(10, yPos + 25);
  tft.print("2023-06-15  Thursday");
}

// 天气图标绘制
void drawWeatherIcon(int x, int y) {
  // 太阳主体
  tft.fillCircle(x + 10, y + 10, 8, ST7735_YELLOW);
  
  // 太阳光线
  for (int i = 0; i < 8; i++) {
    float angle = i * 45 * DEG_TO_RAD;
    tft.drawLine(x + 10, y + 10,
                x + 10 + cos(angle) * 15,
                y + 10 + sin(angle) * 15,
                ST7735_YELLOW);
  }
}

// 温度计图形（备用）
void drawTemperatureGauge(int x, int y, float temp) {
  tft.drawRoundRect(x, y, 20, 40, 5, TEXT_COLOR);
  // ...温度计绘制逻辑...
}

// 湿度指示器（备用）
void drawHumidityIndicator(int x, int y, int humidity) {
  tft.drawCircle(x + 10, y + 10, 10, TEXT_COLOR);
  // ...湿度计绘制逻辑...
}